﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RN.Componentes;
using RN.Entidades;

public partial class Formularios_Activo : System.Web.UI.Page
{
    private string[] Ansi = { " ", "!", "''", "#", "$", "%", "&", " ", "(", ")", "*", "+",",","-", ".", "/",
                                "0","1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">","?",
                                "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P","Q",
                                "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[","/", "]",
                                "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "q", "r",
                                "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", " ", "€", " ", "‚", "ƒ", "„", "…", "†",
                                "‡", "ˆ", "‰", "Š", "‹", "Œ", " ", "Ž", " ", " ", "‘", "’", "“", "”", "•", "–", "—", "˜", "™", "š",
                                "›œ", " ", "ž", "Ÿ", " ", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", " ", "®", "¯",
                                "°", "±", "²", " ", "³", "´", "µ", "¶", "•", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â",
                                "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", " ", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ",
                                "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", " ", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è",
                                "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", " ", "û",
                                "ü", "ý", "þ", "ÿ" };
    private string codigobarnumerico;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            CargarGrid();

            ddlEstado.Items.Add("E"); //Excelente
            ddlEstado.Items.Add("B"); //Bueno
            ddlEstado.Items.Add("R"); //Regular
            ddlEstado.Items.Add("M"); //Malo

            ddlPropiedad.Items.Add("P"); //Propio
            ddlPropiedad.Items.Add("T"); //Terceros

            ddlAsignacion.Items.Add("C"); //Custodia
            ddlAsignacion.Items.Add("D"); //Disponible

            ddlAlta.Items.Add("Compra");
            ddlAlta.Items.Add("Donación");
            ddlAlta.Items.Add("Custodia");

            ddlSeguro.Items.Add("S"); //Si
            ddlSeguro.Items.Add("N"); //No
        }
    }

    public void CargarGrid()
    {
        List<Activo> obj = CActivo.Traer();
        grvActivos.DataSource = obj;
        grvActivos.DataBind();
    }

    protected void btnRegistrar_Click(object sender, EventArgs e)
    {
        Activo act = new Activo();

        act.Codigodebarras = GenerarCodigoBar128();
        act.Codigosubfamilia.Codigo = Convert.ToInt32(ddlSubfamilia.SelectedValue);
        act.Descripcion = txtDescripcion.Text;
        act.Propiedad = Convert.ToChar(ddlPropiedad.SelectedItem.ToString());
        act.Fechacompra = Convert.ToDateTime(txtFechaCompra.Text);
        act.Fechaalta = DateTime.Now;
        act.Vidautil = Convert.ToInt32(txtVida.Text);
        act.Codigoproveedor.Codigo = Convert.ToInt32(ddlProveedor.SelectedValue);
        act.Estado = Convert.ToChar(ddlEstado.SelectedItem.ToString());
        act.Marca = txtMarca.Text;
        act.Modelo = txtModelo.Text;
        act.Forma = txtForma.Text;
        act.Serial = txtSerial.Text;
        act.Color = txtColor.Text;
        act.Capacidad = Convert.ToInt32(txtCapacidad.Text);
        act.Material = txtMaterial.Text;
        act.Alto = txtAlto.Text;
        act.Largo = txtLargo.Text;
        act.Ancho = txtAncho.Text;
        act.Diametro = Convert.ToInt32(txtDiametro.Text);
        act.Numerodivisiones = Convert.ToInt32(txtDivisiones.Text);
        act.Codigopersonal.Codigo = Convert.ToInt32(ddlPersonal.SelectedValue);
        act.Tipoasignacion = Convert.ToChar(ddlAsignacion.SelectedItem.ToString());
        act.Tipodealta = ddlAlta.SelectedItem.ToString();
        act.Numerocomprobante = Convert.ToInt32(txtComprobante.Text);
        act.Reportadoalseguro = Convert.ToChar(ddlSeguro.SelectedIndex.ToString());
        act.Fechabaja = Convert.ToDateTime(txtFechaBaja.Text);
        act.Motivobaja = txtMotivoBaja.Text;
        act.Valor = Convert.ToDouble(txtValor.Text);
        act.Codigopunto.Codigo = Convert.ToInt32(ddlPunto.SelectedValue);

        bool coact = CActivo.Insertar(act);

        if (coact)
        {
            lblMensaje.Text = "El activo fue registrado correctamente";
            ResetFormControlValues(txtID);
            ResetFormControlValues(txtDescripcion);
            ResetFormControlValues(txtFechaCompra);
            ResetFormControlValues(txtVida);
            ResetFormControlValues(txtMarca);
            ResetFormControlValues(txtModelo);
            ResetFormControlValues(txtForma);
            ResetFormControlValues(txtSerial);
            ResetFormControlValues(txtColor);
            ResetFormControlValues(txtCapacidad);
            ResetFormControlValues(txtMaterial);
            ResetFormControlValues(txtAlto);
            ResetFormControlValues(txtLargo);
            ResetFormControlValues(txtAncho);
            ResetFormControlValues(txtDiametro);
            ResetFormControlValues(txtDivisiones);
            ResetFormControlValues(txtComprobante);
            ResetFormControlValues(txtFechaBaja);
            ResetFormControlValues(txtMotivoBaja);
            ResetFormControlValues(txtValor);
            lblBarras.Text = act.Codigodebarras;
            CargarGrid();
        }
        else
        {
            lblMensaje.Text = "El activo no fue registrado correctamente";
        }
    }

    public string GenerarCodigo()
    {
        string codigo = "";
        string Ultimo = (CActivo.TraerUltimoCreado()).Codigo + "";
        
        if (Ultimo.Length == 1)
        {
            codigo = "41477700000000" + Ultimo;
        }
        if (Ultimo.Length == 2)
        {
            codigo = "4147770000000" + Ultimo;
        }
        if (Ultimo.Length == 3)
        {
            codigo = "414777000000" + Ultimo;
        }
        if (Ultimo.Length == 4)
        {
            codigo = "41477700000" + Ultimo;
        }
        if (Ultimo.Length == 5)
        {
            codigo = "4147770000" + Ultimo;
        }
        if (Ultimo.Length == 6)
        {
            codigo = "414777000" + Ultimo;
        }
        if (Ultimo.Length == 7)
        {
            codigo = "41477700" + Ultimo;
        }
        if (Ultimo.Length == 8)
        {
            codigo = "4147770" + Ultimo;
        }
        if (Ultimo.Length == 9)
        {
            codigo = "414777" + Ultimo;
        }

        int pos = 1;
        int total = 0;
        for (int i = codigo.Length - 12; i < codigo.Length; i++)
        {
            int numero = Convert.ToInt16(codigo.Substring(i, 1));
            if (pos % 2 == 0)
            {
                total = total + numero * 3;
            }
            else
            {
                total = total + numero * 1;
            }
            pos++;
        }
        codigo = codigo + total;
        int funcion = Convert.ToInt32(codigo.Substring(15));
        Ultimo = codigo.Substring(15);
        Ultimo = Ultimo.Substring(0, 1);
        total = (Convert.ToInt32(Ultimo + "0") + 10) - funcion;
        codigo = codigo + total;
        return codigo;
    }

    public string GenerarCodigoBar128()
    {
        string codigo = "‰";
        int secuencia = 1;
        codigobarnumerico = GenerarCodigo();
        for (int i = 0; i < codigobarnumerico.Length; i++)
        {
            int valor = Convert.ToInt32(codigobarnumerico.Substring(i, 2));
            valor = valor + 32;
            i++;
            if (Ansi[valor - 32].Equals(" "))
            {
                codigo = codigo + "è";
            }
            else
            {
                codigo = codigo + Ansi[valor - 32];
            }
        }
        int total = 0;
        for (int i = 0; i < codigobarnumerico.Length; i++)
        {
            int valor = Convert.ToInt32(codigobarnumerico.Substring(i, 2));
            total = (Convert.ToInt32(codigobarnumerico.Substring(i, 2)) * secuencia) + total;
            total = total % 103;
            i++;
            secuencia++;
        }
        codigo = codigo + Ansi[total] + "Š";
        return codigo;
    }

    protected void grvActivos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int id = Convert.ToInt32(e.CommandArgument);

        if (e.CommandName == "Seleccionar")
        {
            Activo act = CActivo.TraerXId(id);

            lblBarras.Text = GenerarCodigoBar128();
            ddlSubfamilia.SelectedIndex = act.Codigosubfamilia.Codigo;
            txtDescripcion.Text = act.Descripcion.ToString();
            ddlPropiedad.Text = act.Propiedad.ToString();;
            txtFechaCompra.Text = act.Fechacompra.ToString();
            txtVida.Text = act.Vidautil.ToString();
            ddlProveedor.SelectedIndex  = act.Codigoproveedor.Codigo;
            ddlEstado.Text = act.Estado.ToString();
            txtMarca.Text = act.Marca.ToString();
            txtModelo.Text = act.Modelo.ToString();
            txtForma.Text = act.Forma.ToString();
            txtSerial.Text = act.Serial.ToString();
            txtColor.Text = act.Color.ToString();
            txtCapacidad.Text = act.Capacidad.ToString();
            txtMaterial.Text = act.Material.ToString();
            txtAlto.Text = act.Alto.ToString();
            txtLargo.Text = act.Largo.ToString();
            txtAncho.Text = act.Ancho.ToString();
            txtDiametro.Text = act.Diametro.ToString();
            txtDivisiones.Text = act.Numerodivisiones.ToString();
            ddlPersonal.SelectedIndex = act.Codigopersonal.Codigo;
            ddlAsignacion.Text = act.Tipoasignacion.ToString();
            ddlAlta.Text = act.Tipodealta.ToString();
            txtComprobante.Text = act.Numerocomprobante.ToString();
            ddlSeguro.Text = act.Reportadoalseguro.ToString();
            txtFechaBaja.Text = act.Fechabaja.ToString();
            txtMotivoBaja.Text = act.Motivobaja.ToString();
            txtValor.Text = act.Valor.ToString();
            ddlPunto.SelectedIndex = act.Codigopunto.Codigo;
        }
        else
        {
            if (e.CommandName == "Eliminar")
            {
                bool coact = CActivo.EliminarActivo(id);
                if (coact)
                {
                    lblMensaje.Text = "El activo fue eliminado correctamente";
                    CargarGrid();
                }
                else
                {
                    lblMensaje.Text = "El activo no fue eliminado correctamente";
                }
            }
        }
    }
    protected void btnModificar_Click(object sender, EventArgs e)
    {
        Activo act = new Activo();

        act.Codigo = Convert.ToInt32(txtID.Text);
        act.Codigodebarras = GenerarCodigoBar128();
        act.Codigosubfamilia.Codigo = Convert.ToInt32(ddlSubfamilia.SelectedValue);
        act.Descripcion = txtDescripcion.Text;
        act.Propiedad = Convert.ToChar(ddlPropiedad.SelectedItem);
        act.Fechacompra = Convert.ToDateTime(txtFechaCompra.Text);
        act.Fechaalta = DateTime.Now;
        act.Vidautil = Convert.ToInt32(txtVida.Text);
        act.Codigoproveedor.Codigo = Convert.ToInt32(ddlProveedor.SelectedValue);
        act.Estado = Convert.ToChar(ddlEstado.SelectedItem);
        act.Marca = txtMarca.Text;
        act.Modelo = txtModelo.Text;
        act.Forma = txtForma.Text;
        act.Serial = txtSerial.Text;
        act.Color = txtColor.Text;
        act.Capacidad = Convert.ToInt32(txtCapacidad.Text);
        act.Material = txtMaterial.Text;
        act.Alto = txtAlto.Text;
        act.Largo = txtLargo.Text;
        act.Ancho = txtAncho.Text;
        act.Diametro = Convert.ToInt32(txtDiametro.Text);
        act.Numerodivisiones = Convert.ToInt32(txtDivisiones.Text);
        act.Codigopersonal.Codigo = Convert.ToInt32(ddlPersonal.SelectedValue);
        act.Tipoasignacion = Convert.ToChar(ddlAsignacion.SelectedItem);
        act.Tipodealta = ddlAlta.SelectedItem.ToString();
        act.Numerocomprobante = Convert.ToInt32(txtComprobante.Text);
        act.Reportadoalseguro = Convert.ToChar(ddlSeguro.SelectedItem);
        act.Fechabaja = Convert.ToDateTime(txtFechaBaja.Text);
        act.Motivobaja = txtMotivoBaja.Text;
        act.Valor = Convert.ToDouble(txtValor.Text);
        act.Codigopunto.Codigo = Convert.ToInt32(ddlPunto.SelectedValue);

        bool coact = CActivo.ActualizarActivo(act);
        
        if (coact)
        {
            lblMensaje.Text = "El activo fue modificado correctamente";
            ResetFormControlValues(txtID);
            ResetFormControlValues(txtDescripcion);
            ResetFormControlValues(txtFechaCompra);
            ResetFormControlValues(txtVida);
            ResetFormControlValues(txtMarca);
            ResetFormControlValues(txtModelo);
            ResetFormControlValues(txtForma);
            ResetFormControlValues(txtSerial);
            ResetFormControlValues(txtColor);
            ResetFormControlValues(txtCapacidad);
            ResetFormControlValues(txtMaterial);
            ResetFormControlValues(txtAlto);
            ResetFormControlValues(txtLargo);
            ResetFormControlValues(txtAncho);
            ResetFormControlValues(txtDiametro);
            ResetFormControlValues(txtDivisiones);
            ResetFormControlValues(txtComprobante);
            ResetFormControlValues(txtFechaBaja);
            ResetFormControlValues(txtMotivoBaja);
            ResetFormControlValues(txtValor);
            CargarGrid();
        }
        else
        {
            lblMensaje.Text = "El activo no fue modificado correctamente";
        }
    }

    public void ResetFormControlValues(Control parent)
    {
        foreach (Control c in parent.Controls)
        {
            if (c.Controls.Count > 0)
            {
                ResetFormControlValues(c);
            }
            else
            {
                switch (c.GetType().ToString())
                {
                    case "System.Web.UI.WebControls.TextBox":
                        ((TextBox)c).Text = "";
                        break;
                    case "System.Web.UI.WebControls.CheckBox":
                        ((CheckBox)c).Checked = false;
                        break;
                    case "System.Web.UI.WebControls.RadioButton":
                        ((RadioButton)c).Checked = false;
                        break;
                }
            }
        }
    }
}